home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_asm / testsys / testsys.asm next >
Assembly Source File  |  1987-04-08  |  4KB  |  146 lines

  1. CODE    SEGMENT BYTE PUBLIC
  2.         ASSUME CS:CODE, DS:CODE, ES:CODE
  3.  
  4.         ORG     100H
  5.  
  6. CR      EQU     13
  7. LF      EQU     10
  8.  
  9. BEGIN   PROC
  10.         MOV     DX,OFFSET NOTICE
  11.         MOV     AH,09H
  12.         INT     21H
  13.  
  14.         MOV     DX, 0H
  15.         MOV     BX, 81H
  16. NEXT:
  17.         MOV     DL,BYTE PTR CS:[BX]
  18.         INC     BX
  19.         CMP     DL,20H
  20.         JE      NEXT
  21.  
  22.         MOV     AL,BYTE PTR CS:[BX]
  23.         CMP     AL,0DH
  24.         JE      DONE
  25. PERROR:
  26.         MOV     DX,OFFSET BAD    ;Illegal Parameter Specified
  27.         MOV     AH,09H
  28.         INT     21H
  29.         MOV     AL,2            ; Errorlevel 2 for Parameter Error
  30.         JMP     QUIT
  31.  
  32. DONE:
  33.         CMP     DL, 30H
  34.         JL      PERROR
  35.         CMP     DL, 39H
  36.         JG      PERROR
  37.         SUB     DL, 30H
  38.  
  39.         MOV     AH,62H          ; Check Available Memory
  40.         INT     21H             ; Get Current PSP
  41.         MOV     CL,12
  42.         SHR     BX,CL           ; Get us a single digit.
  43.         CMP     BX,DX           ; Indicates # of 64k blocks that are in use.
  44.         JG      REBOOT          ; If greater than 2 used then reboot ( < 448k )
  45.  
  46.         MOV     AH,2AH          ; Check Current Date
  47.         INT     21H
  48.         CMP     CX,1980
  49.         JZ      ERROR
  50.         MOV     AL,00H
  51.         JMP     QUIT
  52. ERROR:
  53.         MOV     AL,01H
  54. QUIT:
  55.         MOV     AH,4CH
  56.         INT     21H
  57.  
  58. REBOOT:
  59.         MOV     SI,0080H                ;Is DOS doing something now?
  60.         MOV     CH,00H
  61.         MOV     CL,[SI]
  62.         JCXZ    GET_READY               ;No, so go reboot the machine.
  63. LOOP1:
  64.         INC     SI
  65.         MOV     AL,[SI]
  66.         CMP     AL,2FH
  67.         JZ      SKIP1
  68.         LOOP    LOOP1
  69.         JMP     GET_READY 
  70.  
  71. SKIP1:
  72.         MOV     AL,[SI+01]
  73.         CMP     AL,6CH
  74.         JZ      SKIP2
  75.         CMP     AL,4CH
  76.         JZ      SKIP2
  77.         CMP     AL,73H
  78.         JZ      SKIP3
  79.         CMP     AL,53H
  80.         JZ      SKIP3
  81.  
  82. GET_READY :
  83.         MOV     AX,1234H
  84.         JMP     SKIP4
  85.  
  86. SKIP2:
  87.         MOV     AX,0000H
  88.         MOV     AL,0CH
  89.         MOV     DX,03F2H        ;Address of Floppy Controller Port
  90.         OUT     DX,AL
  91.  
  92. SKIP4:
  93.         MOV     BX,0040H
  94.         MOV     ES,BX
  95.         MOV     ES:[0072H],AX
  96. IT      DB      0EAH, 00H, 00H, 0FFH, 0FFH  ; JMP to reboot routine
  97.  
  98. SKIP3:
  99.         MOV     AX,0000         ;These instructions ready things for a
  100.         MOV     ES,AX           ; reboot using INT 19
  101.         MOV     BX,0F000H
  102.         CLI
  103.         MOV     DI,0024H
  104.         MOV     AX,0E987H
  105.         CALL    SUB
  106.         MOV     DI,0058H
  107.         MOV     AX,0E82EH
  108.         CALL    SUB
  109.         MOV     DI,041AH
  110.         PUSH    BX
  111.         MOV     AX,001EH
  112.         MOV     BX,AX
  113.         CALL    SUB
  114.         POP     BX
  115.         MOV     DI,0040H
  116.         MOV     AX,0F065H
  117.         CALL    SUB
  118.         MOV     DI,005CH
  119.         MOV     AX,0EFD2H
  120.         CALL    SUB
  121.         MOV     DI,0070H
  122.         MOV     AX,0FF53H
  123.         CALL    SUB
  124.         MOV     AX,0000H
  125.         MOV     DI,0180H
  126.         MOV     CX,0010H
  127.         REPZ    STOSW
  128.         STI
  129.         INT     19H
  130.  
  131. SUB:
  132.         MOV     ES:[DI],AX
  133.         MOV     ES:[DI+02],BX
  134.         RET
  135.  
  136. NOTICE  DB      'TESTSYS Version 1.00 - (C)copyright April 1987, Christopher D. Orr$'
  137. BAD     DB      CR,LF,'*** ERROR ***  Syntax: TESTSYS {#}  where # is from 0 to 9.  Each',CR,LF
  138.         DB      '                  number indicates a bank of 64k. (e.g. 1 is less than 128k)',CR,LF
  139.         DB      CR,LF,'Purpose:',CR,LF
  140.         DB      '    Will reboot system if free memory less than that specified.',CR,LF
  141.         DB      '    Sets Errorlevel=1 if year=1980.$'
  142.  
  143. BEGIN   ENDP
  144. CODE    ENDS
  145.         END   BEGIN
  146.